Programmable logic devices (“PLDs”) are a well-known type of integrated circuit that can be programmed to perform specified logic functions. One type of PLD, the field programmable gate array (“FPGA”), typically includes an array of programmable tiles. These programmable tiles can include, for example, input/output blocks (“IOBs”), configurable logic blocks (“CLBs”), dedicated random access memory blocks (“BRAMs”), multipliers, digital signal processing blocks (“DSPs”), processors, clock managers, delay lock loops (“DLLs”), and so forth. Notably, as used herein, “include” and “including” mean including without limitation.
One such FPGA, the Xilinx Virtex® FPGA, is available from. Xilinx Inc., 2100 Logic. Drive San. Jose Calif. 95124. Another type of PLD is the Complex Programmable Logic Device (“CPLD”). A CPLD includes two or more “function blocks” connected together and to input/output (“I/O”) resources by an interconnect switch matrix. Each function block of the CPLD includes a two-level AND/OR structure similar to those used in. Programmable. Logic. Arrays (“PLAs”) and Programmable Array Logic (“PAL”) devices. Other PLDs are programmed by applying a processing layer, such as a metal layer, that programmably interconnects the various elements on the device. These PLDs are known as mask programmable devices. PLDs can also be implemented in other ways, for example, using fuse or antifuse technology. The terms “PLD” and “programmable logic device” include but are not limited to these exemplary devices, as well as encompassing devices that are only partially programmable.
For purposes of clarity, FPGAs are described below though other types of PLDs may be used. FPGAs may include one or more embedded microprocessors. For example, a microprocessor may be located in an area reserved for it, generally referred to as a “processor block.”
Random numbers, or more generally a random sequence, may be used in a variety of applications in engineering and computing fields. Although random events occur in nature, such as thermal noise and radioactive decay, true random number generation by definition would be unpredictable, irreproducible, and non-repeating. Therefore, it is difficult to provide true random number generation in an integrated circuit. Heretofore, hardware and software random number generators used pseudo-random sequences that are not true random number sequences. For example, conventional pseudo-random sequence generators use seed information (a “seed”), and any information regarding the seed may lead to complete knowledge of the generated sequence. Accordingly, security and other cryptographic applications may be enhanced by providing true random number generation.
Thus, it would be desirable and useful to provide means for true random number generation for an integrated circuit.